// vmod + 回车 快速生成结构
// 用户相关数据维护和管理模块(token, 登录人信息)

import { getToken, setToken, removeToken } from '@/utils/auth'
// 导入后台接口
import { login, getUserInfo, getUserDetailById } from '@/api/user'
import { resetRouter } from '@/router'
export default {
  namespaced: true,
  state: {
    // 登录之后的token数据
    // 会先从本地cookie读取,没有就是空
    token: getToken() || '',
    // 登录人的信息
    userInfo: {}
  },
  // 修改state中的数据,同步处理
  mutations: {
    // 存储token
    updateToken (state, token) {
      state.token = token
      // 本地也存一份
      setToken(token)
    },
    // 删除token
    delToken (state) {
      state.token = ''
      // 本地也要清除
      removeToken()
    },
    // 存储用户信息
    updateUserInfo (state, userInfo) {
      state.userInfo = userInfo
    },
    // 删除用户信息
    delUserInfo (state) {
      state.userInfo = {}
    }

  },
  // 获取后台数据,异步处理
  actions: {
    // 调用登录接口=> 获取token存储
    async loginAction ({ commit }, payload) {
      // 调用接口
      const token = await login(payload)
      // 存token
      commit('updateToken', token)
    },
    // 获取登录人数据
    async userInfoAction (ctx) {
      const userInfo = await getUserInfo()
      const avator = await getUserDetailById(userInfo.userId)
      ctx.commit('updateUserInfo', { ...userInfo, ...avator })
      // 返回权限点数据
      return userInfo.roles
    },
    // 退出登录,清除本地状态数据
    logoutAction ({ commit }) {
      // 1.如果有退出接口,就调用
      // 2.清除本地登录存储的数据(token,userInfo)
      // 3.重置路由实例 => resetRouter
      // 4.重置菜单的vuex数据 //非必须
      // { root: true } 开启父模块权限 => 可以调用兄弟模块的mutations方法
      commit('delToken')
      commit('delUserInfo')
      resetRouter()
      commit('menu/setMenuList', [], { root: true })
    }
  }
}
